from __future__ import annotations

import arcade


"""
窗口内部移动圆
"""


SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
CIRCLE_RADIUS = 30

class MovingCircleWindow(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "跟随鼠标的圆")
        self.circle_x = SCREEN_WIDTH // 2
        self.circle_y = SCREEN_HEIGHT // 2
        # 更规范的背景颜色设置方式
        arcade.set_background_color(arcade.color.BLACK)

    def on_mouse_motion(self, x: float, y: float, dx: float, dy: float):
        # 事件：鼠标移动
        """ 更新坐标时添加范围限制 """
        # x位置的范围：最小在左侧+半径的位置（r），最大在最右侧-半径的位置(w-r)
        self.circle_x = max(CIRCLE_RADIUS, min(x, SCREEN_WIDTH - CIRCLE_RADIUS))
        # y位置的范围：最小在底部+半径的位置（r）,最大在顶部-半径的位置（h-r）
        self.circle_y = max(CIRCLE_RADIUS, min(y, SCREEN_HEIGHT - CIRCLE_RADIUS))

    def on_draw(self):
        # 事件：绘制
        """ 修正后的绘制方法 """
        # clear是将整个窗口画面清除
        self.clear()  # 替代 start_render()
        arcade.draw_circle_filled(
            self.circle_x,
            self.circle_y,
            CIRCLE_RADIUS,
            arcade.color.WHITE
        )

def main():
    window = MovingCircleWindow()
    arcade.run()

if __name__ == "__main__":
    main()